﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ForrajeriaBCL;
using ForrajeriaDB;

namespace ForrajeriaFRONT.ABM
{
    public partial class Proveedor : System.Web.UI.Page
    {
        private ProveedorBCL objBC;
        private ProveedorMO objEditar;


        public Proveedor()//Constructor
        {
            objBC = new ProveedorBCL();
        }


        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ddlProvincia.Items.Add(new ListItem("-- Seleccione --", "0"));
                ProvinciaBCL objProvincia = new ProvinciaBCL();
                List<ProvinciaMO> listaProvincia = objProvincia.GetALL();
                foreach (ProvinciaMO aux in listaProvincia)
                {
                    ddlProvincia.Items.Add(new ListItem(aux.Nombre, aux.CodigoProvincia.ToString()));
                }
                ddlProvincia.DataBind();
                ddlProvincia.SelectedIndex = 0;
                modoVentana("bloqueado");
            }
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            modoVentana("busqueda");
            cargarLista();
            pnlModal_ModalPopupExtender.Show();
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            modoVentana("nuevo");
            ViewState["objEditar"] = null;
        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            modoVentana("edicion");
        }

        protected void btnBorrar_Click(object sender, EventArgs e)
        {
            objEditar = (ProveedorMO)ViewState["objEditar"];
            if (objEditar != null)
            {
                string resu = objBC.Eliminar(objEditar);
                if (resu == "1")
                {
                    mensaje.Text = "Eliminado Correctamente";
                    mensaje.ForeColor = System.Drawing.Color.Blue;
                    valSumary.ShowSummary = true;
                }
                else
                {
                    mensaje.ForeColor = System.Drawing.Color.Red;
                    valSumary.ShowSummary = true;
                    mensaje.Text = resu;
                }
            }
            else
            {
                mensaje.ForeColor = System.Drawing.Color.Red;
                valSumary.ShowSummary = true;
                mensaje.Text = "Debe seleccionar algo para eliminar";
            }
            modoVentana("bloqueado");
            mensaje.Visible = true;
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid)
                return;
            objEditar = (ProveedorMO)ViewState["objEditar"];
            if (objEditar == null)
            {
                objEditar = new ProveedorMO();
                objEditar.RazonSocial = txtRazonSocial.Text;
                objEditar.Telefono = txtTelefono.Text;
                objEditar.Mail = txtMail.Text;
                objEditar.Estado = "A";
                objEditar.CuitCuil = txtCuitCuil.Text;
                objEditar.Calle = txtCalle.Text;
                if (txtNumero.Text != "")
                {
                    objEditar.Nro = int.Parse(txtNumero.Text);
                }
                else
                    objEditar.Nro = null;
                objEditar.Piso = txtPiso.Text;
                objEditar.Dpto = txtDpto.Text;
                if (ddlLocalidad.SelectedValue != "")
                {
                    objEditar.Id_localidad = int.Parse(ddlLocalidad.SelectedValue);
                }
                else
                    objEditar.Id_localidad = null;
                string resu;
                resu = objBC.Adicionar(objEditar);
                if (resu == "1")
                {
                    mensaje.ForeColor = System.Drawing.Color.Blue;
                    valSumary.ShowSummary = true;
                    mensaje.Text = "Guardado con Exito";
                }
                else
                {
                    mensaje.ForeColor = System.Drawing.Color.Red;
                    valSumary.ShowSummary = true;
                    mensaje.Text = resu;
                }
                modoVentana("bloqueado");
            }
            else //UPDATE
            {
                ProveedorMO objActual = new ProveedorMO();
                objEditar.CodigoProveedor = objActual.CodigoProveedor;
                objEditar.RazonSocial = txtRazonSocial.Text;
                objEditar.Telefono = txtTelefono.Text;
                objEditar.Mail = txtMail.Text;
                objEditar.Estado = "A";
                objEditar.CuitCuil = txtCuitCuil.Text;
                objEditar.Calle = txtCalle.Text;
                if (txtNumero.Text != "")
                {
                    objEditar.Nro = int.Parse(txtNumero.Text);
                }
                else
                    objEditar.Nro = null;
                objEditar.Piso = txtPiso.Text;
                objEditar.Dpto = txtDpto.Text;
                if (ddlLocalidad.SelectedValue != "")
                {
                    objEditar.Id_localidad = int.Parse(ddlLocalidad.SelectedValue);
                }
                else
                    objEditar.Id_localidad = null;
                string resu;
                resu = objBC.Actualizar(objEditar, objActual);
                if (resu == "1")
                {
                    mensaje.ForeColor = System.Drawing.Color.Blue;
                    valSumary.ShowSummary = true;
                    mensaje.Text = "Guardado con Exito";
                }
                else
                {
                    mensaje.ForeColor = System.Drawing.Color.Red;
                    valSumary.ShowSummary = true;
                    mensaje.Text = resu;
                }
            }
            ViewState["objEditar"] = null;
            modoVentana("bloqueado");
            mensaje.Visible = true;
        }

        protected void onRowSelected(Dictionary<string, string> objReto) //el parametro de este metodo utiliza un objeto del tipo clave valor para poder realizar la asignacion al objeto la clave esta dada 
                //por el valor que se le haya asignado al campo datafield de la matriz que recibe el control al inicializarlo.
        {
            objEditar = new ProveedorMO();
            objEditar.CodigoProveedor = int.Parse(objReto["codigoProveedor"]); ;
            objEditar.RazonSocial = objReto["razonSocial"];
            objEditar.Telefono = objReto["telefono"]; 
            objEditar.Mail = objReto["mail"];
            objEditar.Estado = objReto["estado"];
            objEditar.CuitCuil = objReto["CuitCuil"];
            objEditar.Calle = objReto["calle"];
            objEditar.Piso = objReto["piso"];
            objEditar.Dpto = objReto["dpto"];

            if (objReto["nro"] != "")
            { objEditar.Nro = int.Parse(objReto["nro"]); }
            else { objEditar.Nro = null; }


            if (objReto["id_localidad"] != "")
            { objEditar.Id_localidad = int.Parse(objReto["id_localidad"]); }
            else { objEditar.Id_localidad = null; }

            ViewState["objEditar"] = objEditar;

            txtRazonSocial.Text = objEditar.RazonSocial;
            txtTelefono.Text = objEditar.Telefono;
            txtMail.Text = objEditar.Mail;
            txtCuitCuil.Text = objEditar.CuitCuil;
            txtCalle.Text = objEditar.Calle;
            txtNumero.Text = objEditar.Nro.ToString();
            txtPiso.Text = objEditar.Piso;
            txtDpto.Text = objEditar.Dpto;

            int localidad;
            int provincia;
            if (objEditar.Id_localidad != null)
            {
                localidad = (int)objEditar.Id_localidad;
                provincia = buscarProvincia(localidad);
            }
            else
            {
                localidad = 0;
                provincia = 0;
            }

            ddlProvincia.SelectedValue = provincia.ToString();
            ddlProvincia_SelectedIndexChanged(null, null);
            ddlLocalidad.SelectedValue = localidad.ToString();
            ddlLocalidad.Enabled = false;
        }

        protected void ddlProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlLocalidad.Enabled = false;
            ddlLocalidad.Items.Clear();
            if (ddlProvincia.SelectedIndex != 0)
            {
                ddlLocalidad.Items.Add(new ListItem("-- Seleccione --", "0"));
                LocalidadBCL objLoc = new LocalidadBCL();
                List<LocalidadMO> listaLocalidad = objLoc.GetAll(int.Parse(ddlProvincia.SelectedValue));
                foreach (LocalidadMO aux in listaLocalidad)
                {
                    ddlLocalidad.Items.Add(new ListItem(aux.Nombre, aux.Id_localidad.ToString()));
                }
                ddlLocalidad.DataBind();
                ddlLocalidad.Enabled = true;
            }
            UpdatePaneL1.Update();
        }

        protected void cus_Provincia_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (ddlProvincia.SelectedIndex >= 1)
            {
                args.IsValid = true;
            }
            else
            {
                args.IsValid = false;
            }
        }

        protected void cus_Localidad_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (ddlLocalidad.SelectedIndex >= 1)
            {
                args.IsValid = true;
            }
            else
            {
                args.IsValid = false;
            }
        }


        public int buscarProvincia(int idLocalidad)
        {
            LocalidadBCL objLocalidad = new LocalidadBCL();
            return objLocalidad.GetProvinciaDeLocalidad(idLocalidad);

        }

        public void CleanControl(ControlCollection controles)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Text = string.Empty;
                else if (control is DropDownList)
                    ((DropDownList)control).ClearSelection();
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).ClearSelection();
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).ClearSelection();
                else if (control is RadioButton)
                    ((RadioButton)control).Checked = false;
                else if (control is CheckBox)
                    ((CheckBox)control).Checked = false;
                else if (control.HasControls())
                    CleanControl(control.Controls);
            }
        }

        public void ControlState(ControlCollection controles, Boolean estado)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Enabled = estado;
                else if (control is DropDownList)
                    ((DropDownList)control).Enabled = estado;
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).Enabled = estado;
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).Enabled = estado;
                else if (control is RadioButton)
                    ((RadioButton)control).Enabled = estado;
                else if (control is CheckBox)
                    ((CheckBox)control).Enabled = estado;
                else if (control.HasControls())
                    ControlState(control.Controls, estado);
            }
        }

        protected void modoVentana(string modo)
        {
            switch (modo)
            {
                case "nuevo":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, true);
                    mensaje.Visible = false;
                    break;
                case "busqueda":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, false);
                    mensaje.Visible = false;
                    break;
                case "edicion":
                    ControlState(this.Controls, true);
                    mensaje.Visible = false;
                    break;

                case "bloqueado":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, false);
                    break;
            }
        }

        protected void cargarLista()
        {

            List<ProveedorMO> lista = objBC.GetAll();

            //************* matriz que determina que columna se muestra y cual no *************************************

            string[,] mostrar = new string[3, 11];
            mostrar.Initialize();

            //CABECERA DE LAS COLUMNAS QUE SE MUESTRAN 
            mostrar[0, 1] = "Razón social";
            mostrar[0, 2] = "Teléfono";
            mostrar[0, 3] = "E-Mail";
            mostrar[0, 5] = "Cuit o Cuil";

            //COLUMNAS A MOSTRAR
            mostrar[1, 1] = "1";
            mostrar[1, 2] = "1";
            mostrar[1, 3] = "1";
            mostrar[1, 5] = "1";

            //CAMPOS DATAFIELD 
            mostrar[2, 0] = "codigoProveedor";
            mostrar[2, 1] = "razonSocial";
            mostrar[2, 2] = "telefono";
            mostrar[2, 3] = "mail";
            mostrar[2, 4] = "estado";
            mostrar[2, 5] = "CuitCuil";
            mostrar[2, 6] = "calle";
            mostrar[2, 7] = "nro";
            mostrar[2, 8] = "piso";
            mostrar[2, 9] = "dpto";
            mostrar[2, 10] = "id_localidad";

            //**********************************************************************************************************
            usrBusqueda.initi(lista, mostrar, "ProveedorMO");

        }
    }
}